#ifndef IGAMEOBJECT_H
#define IGAMEOBJECT_H

#include <strstream>
#include <boost\shared_ptr.hpp>
#include <list>

enum ObjectType
{
	OBJECT_VISIBLE,
	OBJECT_BASE,
	OBJECT_MOVEABLE,
	OBJECT_LEVEL,
	OBJECT_CORNER,
	OBJECT_HORIZONTAL_CORNER,
	OBJECT_STRAIGHT,
	OBJECT_VISUAL,
	OBJECT_ACTOR,
	OBJECT_PLAYER,
	OBJECT_BLOBB,
	OBJECT_REWARDORB,
	OBJECT_SAVETRIGGER,
	OBJECT_BASETRIGGER,
	OBJECT_LEVELTRIGGER,
	OBJECT_MISSILE,
	OBJECT_SWORD,
	OBJECT_SHIELD,
	OBJECT_ENEMY,
	OBJECT_MIRROR_BOSS,
	OBJECT_LITTLE_FIGHTER,
	OBJECT_GRAVITYBLOBB,
	OBJECT_SPLIT_BLOBB,
	OBJECT_RANGED_FIGHTER,
	OBJECT_BLOCK_FIGHTER,
	OBJECT_HEDGEHOGBLOBB
};

class IGameObject
{
public:
	virtual ObjectType getType(void) const = 0;
	virtual bool hasType(ObjectType type) const = 0;
	virtual void addType(ObjectType type) = 0;
	virtual void removeType(ObjectType type) = 0;
	virtual bool dead(void) const = 0;
	virtual void kill(void) = 0;
};
typedef std::list<ObjectType> typeList;
typedef boost::shared_ptr<IGameObject> ObjectPtr;

#endif